package Class::Value::Contact::Name::Full;

# $Id: Full.pm 9762 2005-07-11 13:24:12Z gr $

use strict;
use warnings;


our $VERSION = '0.02';


use base 'Class::Value::Contact';


# A name is well-formed if it consists of 2-5 whitespace-separated words, at
# least two of which must contain at least two [A-Za-z] characters. This is
# rather arbitrary; if you allow different forms of names, subclass this
# class.
#
# Note that we don't check whether the string only consists of valid
# characters - that's handled by the charset handler mechanism in
# Class::Value::String (i.e., when checking for the validity of the value -
# here we check for well-formedness).

sub is_well_formed_value {
    my ($self, $value) = @_;
    return 1 unless defined($value) && length($value);
    return 0 unless $self->SUPER::is_well_formed_value($value);

    local $_ = $value;

    my @words = split /\s+/;
    return 0 if @words < 2 || @words > 5;

    my $valid_words = 0;
    for (@words) {
        $valid_words++ if 2 <= (() = /[A-Za-z]/g);
    }
    return $valid_words >= 2;
}


sub send_notify_value_not_wellformed {
    my ($self, $value) = @_;
    local $Error::Depth = $Error::Depth + 2;
    $self->exception_container->record(
        'Class::Value::Contact::Exception::Name::NotWellformed',
        name => $value,
    );
}


sub send_notify_value_invalid {
    my ($self, $value) = @_;
    local $Error::Depth = $Error::Depth + 2;
    $self->exception_container->record(
        'Class::Value::Contact::Exception::Name::Invalid',
        name => $value,
    );
}


1;


__END__

{% USE p = PodGenerated %}

=head1 NAME

{% p.package %} - contact-related value objects

=head1 SYNOPSIS

    {% p.package %}->new;

=head1 DESCRIPTION

None yet. This is an early release; fully functional, but undocumented. The
next release will have more documentation.

=head1 METHODS

=over 4

{% p.write_methods %}

=back

{% p.write_inheritance %}

{% PROCESS standard_pod %}

=cut

